package org.basis.algorithm.greedy;

import java.util.*;

/**
 * 一个数据流中，要求随时可以获取中位数
 * 用户可以一直调用函数给你数字，然后要求你快速返回所有数字的中位数（要求时间复杂度为O（1））
 *
 * @author Mr_wenpan@163.com 2021/12/27 17:22
 */
public class MedianQuick {

    public static void main(String[] args) {
        BitSet bitSet = new BitSet(16);
        bitSet.set(0);
        bitSet.set(1);
        bitSet.set(0, true);
        bitSet.set(2, true);
        bitSet.set(2, false);
        // 将所有为1的位置打印出来
        System.out.println(bitSet);

        containChars("wenpan");
    }

    public static void containChars(String str) {
        BitSet used = new BitSet();
        for (int i = 0; i < str.length(); i++) {
            // set bit for char
            used.set(str.charAt(i));
        }

        StringBuilder sb = new StringBuilder();
        sb.append("[");
        int size = used.size();
        System.out.println(size);
        for (int i = 0; i < size; i++) {
            if (used.get(i)) {
                sb.append((char) i);
            }
        }
        sb.append("]");
        System.out.println(sb.toString());
    }


    private PriorityQueue<Integer> maxHeap = new PriorityQueue<Integer>(new MaxHeapComparator());
    private PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>(new MinHeapComparator());

    /**
     * 不断的给数
     */
    public void addNumber(int num) {

    }

    /**
     * 返回中位数
     */
    public int getMedianQuick() {

        return 1;
    }

    public static class MaxHeapComparator implements Comparator<Integer> {
        @Override
        public int compare(Integer o1, Integer o2) {
            if (o2 > o1) {
                return 1;
            } else if (o2 < o1) {
                return -1;
            } else {
                return 0;
            }
        }
    }

    public static class MinHeapComparator implements Comparator<Integer> {
        @Override
        public int compare(Integer o1, Integer o2) {
            if (o2 < o1) {
                return 1;
            } else if (o1 < o2) {
                return -1;
            } else {
                return 0;
            }
        }
    }
}
